package com.core.util;

import java.lang.reflect.Method;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Parcelable;
import android.text.InputType;
import android.text.TextUtils;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

/**
 * 
 * @Description: TODO(超级工具类与控件相关)
 * 
 * @author gufei 562401002@qq.com
 * 
 * @date 2015年3月17日 下午4:06:44
 */
public class UiTools {

	/** 得到控件中的字符串/多个时则字符串拼接 */
	public static String getString(View... v) {
		StringBuffer stringBuffer = new StringBuffer();
		for (int i = 0; i < v.length; i++) {
			if (v[i] instanceof EditText) {
				stringBuffer.append(((EditText) v[i]).getText().toString()
						.trim());
			} else if (v[i] instanceof TextView) {
				stringBuffer.append(((TextView) v[i]).getText().toString()
						.trim());
			} else if (v[i] instanceof Button) {
				stringBuffer
						.append(((Button) v[i]).getText().toString().trim());
			}
		}
		return stringBuffer.toString();
	}

	public static void cleanView(View... v) {
		for (int i = 0; i < v.length; i++) {
			if (v[i] instanceof EditText) {
				EditText editText = (EditText) v[i];
				editText.setText("");
			} else if (v[i] instanceof TextView) {
				TextView tv = (TextView) v[i];
				tv.setText("");
			}
		}

	}

	/*** 判断字符串中存在空则返回false ***/
	public static boolean Empty(String... str) {
		for (int i = 0; i < str.length; i++) {
			if (TextUtils.isEmpty(str[i])) {
				return false;
			}
		}
		return true;
	}

	public static ProgressDialog getDialog(Context context) {
		ProgressDialog dialog = new ProgressDialog(context);
		dialog.setCancelable(true);// 设置是否可以通过点击Back键取消
		dialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
		return dialog;
	}

	/**
	 * 判断网络是否连接
	 */
	public static boolean checkNet(Context context) {
		ConnectivityManager cm = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo info = cm.getActiveNetworkInfo();
		return info != null;// 网络是否连接
	}

	/**
	 * 截图
	 * 
	 * @param v
	 *            需要进行截图的控件
	 * @return 该控件截图的Bitmap对象。
	 */
	public static Bitmap captureView(View v) {
		v.setDrawingCacheEnabled(true);
		v.buildDrawingCache();
		return v.getDrawingCache();
	}

	/**
	 * 创建快捷方式
	 * 
	 * @param cxt
	 *            Context
	 * @param icon
	 *            快捷方式图标
	 * @param title
	 *            快捷方式标题
	 * @param cls
	 *            要启动的类
	 */
	public void createDeskShortCut(Context cxt, int icon, String title,
			Class<?> cls) {
		// 创建快捷方式的Intent
		Intent shortcutIntent = new Intent(
				"com.android.launcher.action.INSTALL_SHORTCUT");
		// 不允许重复创建
		shortcutIntent.putExtra("duplicate", false);
		// 需要现实的名称
		shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
		// 快捷图片
		Parcelable ico = Intent.ShortcutIconResource.fromContext(
				cxt.getApplicationContext(), icon);
		shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, ico);
		Intent intent = new Intent(cxt, cls);
		// 下面两个属性是为了当应用程序卸载时桌面上的快捷方式会删除
		intent.setAction("android.intent.action.MAIN");
		intent.addCategory("android.intent.category.LAUNCHER");
		// 点击快捷图片，运行的程序主入口
		shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
		// 发送广播。OK
		cxt.sendBroadcast(shortcutIntent);
	}

	/**
	 * 隐藏系统键盘
	 * 
	 * <br>
	 * <b>警告</b> 必须是确定键盘显示时才能调用
	 */
	public static void hideKeyBoard(Activity aty) {
		((InputMethodManager) aty
				.getSystemService(Context.INPUT_METHOD_SERVICE))
				.hideSoftInputFromWindow(
						aty.getCurrentFocus().getWindowToken(),
						InputMethodManager.HIDE_NOT_ALWAYS);
	}

	/**
	 * 打卡软键盘
	 * 
	 * @param mEditText输入框
	 * @param mContext上下文
	 */
	public static void openKeybord(EditText mEditText, Context mContext) {
		InputMethodManager imm = (InputMethodManager) mContext
				.getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
		imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
				InputMethodManager.HIDE_IMPLICIT_ONLY);
	}

	/**
	 * 关闭软键盘
	 * 
	 * @param mEditText输入框
	 * @param mContext上下文
	 */
	public static void closeKeybord(EditText mEditText, Context mContext) {
		InputMethodManager imm = (InputMethodManager) mContext
				.getSystemService(Context.INPUT_METHOD_SERVICE);
		imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
	}

	/**
	 * 禁止Edittext弹出软件盘，光标依然正常显示。
	 */
	public static void disableShowSoftInput(EditText editText) {
		if (android.os.Build.VERSION.SDK_INT <= 10) {
			editText.setInputType(InputType.TYPE_NULL);
		} else {
			Class<EditText> cls = EditText.class;
			Method method;
			try {
				method = cls
						.getMethod("setShowSoftInputOnFocus", boolean.class);
				method.setAccessible(true);
				method.invoke(editText, false);
			} catch (Exception e) {
				// TODO: handle exception
			}

			try {
				method = cls.getMethod("setSoftInputShownOnFocus",
						boolean.class);
				method.setAccessible(true);
				method.invoke(editText, false);
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
}
